/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.edu.flf.audioteca.entidades;

import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

/**
 *
 * @author Nathan Azevedo
 */
@Entity
@Table(name = "tb_musica")
@NamedQueries({
    @NamedQuery(name = "Musica.findAll", query = "SELECT m FROM Musica m"),
    @NamedQuery(name = "Musica.findByNuFaixaMusica", query = "SELECT m FROM Musica m WHERE m.numeroDaFaixa = :numeroDaFaixa and m.albumDaMusica.codigoDoAlbum = :codigoDoAlbum"),
    @NamedQuery(name = "Musica.findByIdCd", query = "SELECT m FROM Musica m WHERE m.numeroDaFaixa = :numeroDaFaixa"),
    @NamedQuery(name = "Musica.findByNmTitulo", query = "SELECT m FROM Musica m WHERE m.nomeDaMusica = :nomeDaMusica"),
    @NamedQuery(name = "Musica.findByNmTipoGravacao", query = "SELECT m FROM Musica m WHERE m.tipoDeGravacao = :tipoDeGravacao")
})
public class Musica implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    @Column(name = "nu_faixa_musica")
    protected Integer numeroDaFaixa;
    //
    @Column(name = "nm_titulo")
    private String nomeDaMusica;
    //
    @Column(name = "nm_tipo_gravacao")
    private String tipoDeGravacao;

    //
    @ManyToOne(optional = false, fetch = FetchType.LAZY,
    cascade = {CascadeType.PERSIST, CascadeType.REMOVE}, targetEntity = Album.class)
    @JoinColumn(name = "id_cd", referencedColumnName = "id_cd")
    private Album albumDaMusica;

    public Musica() {
    }

    public String getNomeDaMusica() {
        return nomeDaMusica;
    }

    public void setNomeDaMusica(String nomeDaMusica) {
        this.nomeDaMusica = nomeDaMusica;
    }

    public String getTipoDeGravacao() {
        return tipoDeGravacao;
    }

    public void setTipoDeGravacao(String tipoDeGravacao) {
        this.tipoDeGravacao = tipoDeGravacao;
    }

    public Album getAlbumDaMusica() {
        return albumDaMusica;
    }

    public void setAlbumDaMusica(Album albumDaMusica) {
        this.albumDaMusica = albumDaMusica;
    }

    public Integer getNumeroDaFaixa() {
        return numeroDaFaixa;
    }

    public void setNumeroDaFaixa(Integer numeroDaFaixa) {
        this.numeroDaFaixa = numeroDaFaixa;
    }

    @Override
    public String toString() {
        return "br.edu.flf.audioteca.entidades.Musica[musica info=" + nomeDaMusica + " " + tipoDeGravacao + "]";
    }
}
